﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Configuration;
using System.Data.OleDb;

namespace Mortgage
{
    /// <summary>
    /// Summary description for MortgageServices
    /// </summary>
    [WebService(Namespace = "http://monopol.mk/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class MortgageServices : System.Web.Services.WebService
    {
        string connection = "konekcija";

        ////////////////////////////////////////Kako treba da izgleda////////////////////////////////////////////////
        ServiceNimic Igrac = new ServiceNimic();// od proekt06
        RegistarNaImoti imot = new RegistarNaImoti();//object od proekt03
        Proekt_Banka banka = new Proekt_Banka();// object od proekt05

        [WebMethod]
        //proverka na poleto dali e na igracot koj e aktiven
        public bool DaliENegov(int GradID, string Igracot)
        {
            string ime = imot.proveriPole(GradID);// povikuvam servis ProveriPole od proekt03
            if (ime.Equals(Igracot))
                return true;
            else
                return false;
        }

        [WebMethod]
        //proverka dali igracot na poleto kaj sto se naogja ima hipoteka
        public bool ImaHipoteka(int GradID, string Igracot)// moze da prima i ID na igracot ne ime
        {
            bool ima = false;
            bool negov = DaliENegov(GradID, Igracot);//proverka dali poleto e negovo

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            if (negov)
            {
                int ID = Igrac.getActivePlayerIndex() + 1;//zimam ID na igracot koj momentalno igra +1 bidejki
                // na nino mu pocnuva od 0

                //proverka dali poleto e pod hipoteka
                string select = "SELECT Hipoteka FROM Gradovi WHERE IgracID=@IgracID AND ID=@GradID";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@Grad", GradID);
                OleDbDataReader citaj = cmd.ExecuteReader();
                citaj.Read();
                if (citaj.GetValue(0).Equals(true))
                    ima = true;
            }
            conn.Close();
            return ima;
        }

        [WebMethod]
        //go dava poleto pod hipoteka
        public void Dadi_pod_Hipoteka(int GradID, string Igracot)// moze da prima i ID na igracot ne ime
        {
            bool ima = ImaHipoteka(GradID, Igracot);// proveruvam dali ima hipoteka
            int GradCena = 0;

            int Kuki = imot.proveriKuki(GradID);// servis od proekt03 za proverka na kuki
            int Hoteli = imot.proveriHoteli(GradID);// servis od proekt03 za proverka na hoteli

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            //ako nema hipoteka i ako nema izgradeno kuka i hotel
            if (!ima && (Kuki == 0) && (Hoteli == 0))
            {
                int ID = Igrac.getActivePlayerIndex() + 1;//zimam ID na igracot koj momentalno igra +1 bidejki
                // na nino mu pocnuva od 0

                // zimam cena od bazata za odreden grad tuka proekt 2 treba da dava cenata
                string select = "SELECT CenaGrad FROM Gradovi WHERE ID=@GradID";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@GradID", GradID);//indeks na gradot kaj sto se naogja igracot
                OleDbDataReader citaj = cmd.ExecuteReader();
                GradCena = Convert.ToInt32(citaj.GetValue(0).ToString());
                int CenaHipoteka = GradCena / 2;

                banka.depositMoney(Igracot, CenaHipoteka);//dodavam pari vo bazata za igracot preku servis od proekt05

                // go stavam gradot pod hipoteka
                string insert = "UPDATE Gradovi SET Hipoteka=@Hipoteka WHERE IgracID=@IgracID AND ID=@GradID";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@Hipoteka", true);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@GradID", GradID);
                cmd.ExecuteNonQuery();

            }
            conn.Close();
        }

        [WebMethod]
        public void PonistiHipoteka(int GradID, string Igracot)// moze da prima i ID na igracot ne ime
        {
            bool ima = ImaHipoteka(GradID, Igracot);
            int GradCena = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            if (ima)
            {
                int ID = Igrac.getActivePlayerIndex() + 1;//zimam ID na igracot koj momentalno igra +1 bidejki
                // na nino mu pocnuva od 0

                // zimam cena od bazata za odreden grad tuka proekt 2 treba da dava cenata
                string select = "SELECT CenaGrad FROM Gradovi WHERE ID=@GradID";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@GradID", GradID);//indeks na gradot kaj sto se naogja igracot
                OleDbDataReader citaj = cmd.ExecuteReader();
                GradCena = Convert.ToInt32(citaj.GetValue(0).ToString());

                int CenaHipoteka = ((GradCena / 2) * 15) / 100 + (GradCena / 2);// cena na hipoteka + 15% kamata

                banka.withdrawMoney(Igracot, CenaHipoteka);//odzemam pari od bazata za igracot preku servis od proekt05

                // trgam hipoteka od gradot
                string insert = "UPDATE Gradovi SET Hipoteka=@Hipoteka WHERE IgracID=@IgracID AND ID=@GradID";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@Hipoteka", false);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@GradID", GradID);
                cmd.ExecuteNonQuery();
            }
            conn.Close();
        }

        [WebMethod]
        //vrakjam string niza so hipoteki za odreden igrac
        public String[] Hipoteki(string Imeto)
        {
            string[] Hipoteki = new string[40];
            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            string select = "SELECT Grad FROM Gradovi WHERE IgracID=@IgracID AND Hipoteka=@Hipoteka";
            OleDbCommand cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@IgracID", Igrac.getActivePlayerIndex() + 1);//indeks od aktivniot igrac (ID-to)
            cmd.Parameters.AddWithValue("@Hipoteka", true);
            OleDbDataReader citaj = cmd.ExecuteReader();
            int i = 0;
            while (citaj.Read())
            {
                Hipoteki[i] = citaj.GetValue(0).ToString();
                i++;
            }
            conn.Close();
            return Hipoteki;
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        /*
         * ////////////////////////////////Ignoriraj//////////////////////////////////////////
        [WebMethod]
        public bool DaliENegov(string Gradot, string Igracot)
        {
            bool negov = false;
            int ID = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            //zemam ID na igracot
            string select = "SELECT ID FROM Igrac WHERE Igrac=@Igrac";
            OleDbCommand cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@Igrac", Igracot);
            OleDbDataReader citaj = cmd.ExecuteReader();
            while (citaj.Read())
            {
                ID = Convert.ToInt32(citaj.GetValue(0));
            }

            //gi zemam gradovite do daden ID od igrac i proveruvam dali se sovpagja so poleto kaj sto 
            // momentalno se naogja igracot
            select = "SELECT Grad FROM Gradovi WHERE IgracID=@IgracID";
            cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@Igrac", ID);
            citaj = cmd.ExecuteReader();
            while (citaj.Read())
            {
                if (citaj.GetValue(0).Equals(Gradot))
                    negov = true;
            }
            conn.Close();
            return negov;
        }

        [WebMethod]
        public int BrNaKuki(string Gradot)
        {
            int Kuki = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            // zemam broj na kuki izgradeni na poleto
            string select = "SELECT Kuki FROM Gradovi WHERE Grad=@Grad";
            OleDbCommand cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@Grad", Gradot);
            OleDbDataReader citaj = cmd.ExecuteReader();
            while (citaj.Read())
            {
                Kuki = Convert.ToInt32(citaj.GetValue(0));
            }
            conn.Close();
            return Kuki;
        }

        [WebMethod]
        public int BrNaHoteli(string Gradot)
        {
            int Hoteli = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            // zemam broj na hoteli izgradeni na poleto
            string select = "SELECT Hoteli FROM Gradovi WHERE Grad=@Grad";
            OleDbCommand cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@Grad", Gradot);
            OleDbDataReader citaj = cmd.ExecuteReader();
            while (citaj.Read())
            {
                Hoteli = Convert.ToInt32(citaj.GetValue(0));
            }
            conn.Close();
            return Hoteli;
        }

        [WebMethod]
        public bool ImaHipoteka(string Gradot, string Igracot)
        {
            bool ima = false;
            bool negov = DaliENegov(Gradot, Igracot);
            int ID = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            if (negov)
            {
                //zemam ID od bazata na igracot koj momentalno igra
                string select = "SELECT ID FROM Igrac WHERE Igrac=@Igrac";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@Igrac", Igracot);
                OleDbDataReader citaj = cmd.ExecuteReader();
                while (citaj.Read())
                {
                    ID = Convert.ToInt32(citaj.GetValue(0));
                }

                //proveruvam dali poleto na igracot e pod hipoteka
                select = "SELECT Hipoteka FROM Gradovi WHERE IgracID=@IgracID AND Grad=@Grad";
                cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@Grad", Gradot);
                citaj = cmd.ExecuteReader();
                citaj.Read();
                if (citaj.GetValue(0).Equals(true))
                    ima = true;
            }
            conn.Close();
            return ima;
        }

        [WebMethod]
        public void Dadi_pod_Hipoteka(string Gradot, string Igracot)
        {
            bool ima = ImaHipoteka(Gradot, Igracot);
            int Kuki = BrNaKuki(Gradot);
            int Hoteli = BrNaHoteli(Gradot);
            int ID = 0;
            int GradCena = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            if (!ima && (Kuki == 0) && (Hoteli == 0))
            {
                // zemam ID na igracot koj momentalno igra
                string select = "SELECT ID FROM Igrac WHERE Igrac=@Igrac";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@Igrac", Igracot);
                OleDbDataReader citaj = cmd.ExecuteReader();
                while (citaj.Read())
                {
                    ID = Convert.ToInt32(citaj.GetValue(0));

                }

                // zemam cena na poleto
                select = "SELECT CenaGrad FROM Gradovi WHERE Grad=@Grad";
                cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@Grad", Gradot);
                citaj = cmd.ExecuteReader();
                while (citaj.Read())
                {
                    GradCena = Convert.ToInt32(citaj.GetValue(0));

                }
                int CenaHipoteka = GradCena / 2;// hipoteka e pola od cenata na poleto

                //dodavam na igracot pari od hipotekata
                string insert = "UPDATE Igrac SET VkupnoPari=VkupnoPari + @CenaHipoteka WHERE ID=@ID";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@CenaHipoteka", CenaHipoteka);
                cmd.Parameters.AddWithValue("@ID", ID);
                cmd.ExecuteNonQuery();

                // go stavam gradot pod hipoteka
                insert = "UPDATE Gradovi SET Hipoteka=@Hipoteka WHERE IgracID=@IgracID AND Grad=@Grad";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@Hipoteka", true);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@Grad", Gradot);
                cmd.ExecuteNonQuery();

            }
            conn.Close();
        }

        [WebMethod]
        public void PonistiHipoteka(string Gradot, string Igracot)
        {
            bool ima = ImaHipoteka(Gradot, Igracot);
            int ID = 0;
            int GradCena = 0;

            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            if (ima)
            {
                // zemam ID na igracot koj momentalno igra
                string select = "SELECT ID FROM Igrac WHERE Igrac=@Igrac";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@Igrac", Igracot);
                OleDbDataReader citaj = cmd.ExecuteReader();
                while (citaj.Read())
                {
                    ID = Convert.ToInt32(citaj.GetValue(0));
                }

                // zemam cena na gradot
                select = "SELECT CenaGrad FROM Gradovi WHERE Grad=@Grad";
                cmd = new OleDbCommand(select, conn);
                cmd.Parameters.AddWithValue("@Grad", Gradot);
                citaj = cmd.ExecuteReader();
                while (citaj.Read())
                {
                    GradCena = Convert.ToInt32(citaj.GetValue(0));

                }
                int CenaHipoteka = ((GradCena / 2) * 15) / 100 + (GradCena / 2);

                // odzemam pari od igracot so kamata 15%
                string insert = "UPDATE Igrac SET VkupnoPari=VkupnoPari - @CenaHipoteka WHERE ID=@ID";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@CenaHipoteka", CenaHipoteka);
                cmd.Parameters.AddWithValue("@ID", ID);
                cmd.ExecuteNonQuery();

                // trgam hipoteka od gradot
                insert = "UPDATE Gradovi SET Hipoteka=@Hipoteka WHERE IgracID=@IgracID AND Grad=@Grad";
                cmd = new OleDbCommand(insert, conn);
                cmd.Parameters.AddWithValue("@Hipoteka", false);
                cmd.Parameters.AddWithValue("@IgracID", ID);
                cmd.Parameters.AddWithValue("@Grad", Gradot);
                cmd.ExecuteNonQuery();
            }
            conn.Close();
        }

        [WebMethod]
        public String[] Hipoteki(string Igracot)
        {
            string[] Hipoteki = new string[40];
            int ID = 0;
            string conString = ConfigurationManager.ConnectionStrings[connection].ConnectionString;
            OleDbConnection conn = new OleDbConnection(conString);
            conn.Open();

            string select = "SELECT ID FROM Igrac WHERE Igrac=@Igrac";
            OleDbCommand cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@Igrac", Igracot);
            OleDbDataReader citaj = cmd.ExecuteReader();
            while (citaj.Read())
            {
                ID = Convert.ToInt32(citaj.GetValue(0));
            }


            select = "SELECT Grad FROM Gradovi WHERE IgracID=@IgracID AND Hipoteka=@Hipoteka";
            cmd = new OleDbCommand(select, conn);
            cmd.Parameters.AddWithValue("@IgracID", ID);
            cmd.Parameters.AddWithValue("@Hipoteka", true);
            citaj = cmd.ExecuteReader();
            int i = 0;
            while (citaj.Read())
            {
                Hipoteki[i] = citaj.GetValue(0).ToString();
                i++;
            }
            return Hipoteki;
        }
        */
    }
}
